`timescale 1ns/1ps
/////////////////////////////////////////////////////////////////////////////
////                        宏定义模块                                   ////
////外部接口：无                                                         ////
////功能描述：宏定义代码中的变量参数                                     ////
////版本    : 2008.5.8                                                   ////
////////////////////////////////////////////////////////////////////////////

//注释就是FPGA

//`define  NO_CPU_MODE

`define cptins_fpga_register     28'h00118
`define cptsta_fpga_registe     28'h0011c
`define dpramsta_fpga_register     28'h00120
`define insert_fpga_register     28'h00124
`define insertlen_fpga_register     28'h00128
`define insertinfo_fpga_register     28'h0012c
`define insert_dir_fpga_register     28'h00130
`define opains_fpga_register     28'h00134
`define dstmac_fpga_registe     28'h00138
`define capdir_fpga_register     28'h0015c
`define insertram_fpga 16'h1400



// BD总数目 BDNUM
`define BDNUM 16'd4095
//1ms_对应的时钟周期数目
`define ONE_MS 20'd312499
//仿真用 不仿真时注释掉
//`define SIM
`define  MIN_LEN  64
`define  MAX_LEN  1518
`define  SEND_NUM 300000
 
`define     ASIC
//`define CPU
`define  PERIOD 4


//delay time 

//scheduler_top delay
//`define   		DELAYTIME 				1
`define   		DELAYTIME 				0
//`define   		MC_DELAY 				1
`define   		MC_DELAY 				0

//`define			FRAME_LENGTH			11
`define			RAM_ADDRESS_LEN		    11
`define         SR_FIFO_DATA_WIDTH      80      ///zhanglei 2012.12.20
`define         RX_FIFO_DATA_WIDTH      40     ///zhanglei 11.9
//`define			FF_DEPTH				16
`define			FF_DEPTH				17      ///// 256 DB
`define			BUS_DATA_W  			32
`define			SSRAM_ADDRESS_LEN		12     ////zl 11.1



`define EMAC    1

`define  EMAC_ID  8'd85
`define  MULTI_ID  8'hff
`define	 FREE_LIST_ID		 8'd254
//`define  DT  1
`define  DT  0

`define	  LEN_RAM_ADDR_WIDTH    8
`define   LEN_RAM_BYTEENA_WIDTH 6
`define	  LEN_RAM_DATA_WIDTH    48	
//CAM module
//`define  LIVE_TIME  300   //It's 300s 300 个周期
`define  LIVE_TIME  511   //prolong the delete time for test popuse --gong 1231
`define  FRESH_TIME  29'd20000_0000  //   29'd10000_0000 is correct,means 1s

//qm module use  
`define   FRAME_LENGTH 11
//`define   qm_pointer   7
//`define   QM_MEM_ADDRESS_WIDTH 7
`define   qm_pointer   11          ////zhanglei 9.4
`define   QM_MEM_ADDRESS_WIDTH 16  ////zhanglei 11.12
`define   QM_MEM_DATA_WIDTH  32

`define   OQD_RAM_ADDRESS_WIDTH   8    ////zhanglei 9.3
`define   OQD_RAM_DATA_WIDTH      144
`define   BD_RAM_ADDRESS_WIDTH      16
`define   BD_RAM_BYTEENA_WIDTH  4
`define   BD_RAM_DATA_WIDTH  32
`define   FQD_RAM_DATA_WIDTH  64
`define   FQD_RAM_ADDRESS_WIDTH 5
`define   HIGH_PRI_LEN   1024
`define   MID_PRI_LEN    512
`define   LOW_PRI_LEN    512
`define   EMAC_QUE_LEN   512
/***************************************INSIDE RAM*****************************************/ 
//inside ram
//`define	  FF_DEPTH	         16
/********************************************************************************/
`define		MEM_ADDR_W	     21 
`define		MEM_DATA_W	     32
`define		FR_LEN_W	     16
/********************************************************************************/
//长度信息，Dd、Du信息在cpu中的存储位置
//`define   CPU_CONTROL_ADDR   11'b00000000000
//控制信息在cpu中的起始位置
`define   CPU_CONTROL_ADDR   11'b00000000001
`define   PHY_RXDATA_LEN     11'b00000000010
`define   PHY_CONTROL_ADDR   11'b00000000001
`define   PHY_TXDATA_ADDR    11'b00000000010
`define   PHY_RXDATA_ADDR    11'b00000000010
//HIMAC帧在发送DPRAM中的起始位置
`define   DPRAM_TXDATA_ADDR    11'b00000000000
//HIMAC帧在接收DPRAM中的起始位置
`define   DPRAM_RXDATA_ADDR    11'b00000000000

////zl  6.7
// `define QUEUE_NUM_WIDTH   6
`define QUEUE_NUM_WIDTH   8
`define QUEUE_NUM         198
`define QUEUE_NUM_HALF    99

`define   RF_ADDRESS_WIDTH   8    ////zhanglei 9.3
`define   RF_DATA_WIDTH      128

//MAP IP
    `define MAC_SOURCE_REPLACE_EN           1
    `define MAC_TARGET_CHECK_EN             1
    `define MAC_BROADCAST_FILTER_EN         1
    `define MAC_TX_FF_DEPTH 		    10
    `define MAC_RX_FF_DEPTH 		    10

//`define SIM_MODE 注释为广播

`define SEND_FRAME_NUM 100

//BASE ADDR                           //[16:?]
`define BV1_BASE_ADDR                   7'h01               //CLASS_8ME_TOP
`define ACTION1_BASE_ADDR               7'h03               //CLASS_8ME_TOP
`define HASH2_BASE_ADDR                 7'h04               //CLASS_8ME_TOP
`define RBVE31_BASE_ADDR                7'h05               //CLASS_8ME_TOP
`define RBVE32_BASE_ADDR                7'h23               //CLASS_8ME_TOP

//2022.5.9
//expect: rbve31: 05_0000-22_ffff; rbve32 23_0000-30_ffff
//actual: rbve31: 10_0000-1f_ffff; rbve32 20_0000-2f_ffff
`define RBVE31_BASE_ADDR_L              7'h10               //CLASS_8ME_TOP
`define RBVE32_BASE_ADDR_L              7'h20               //CLASS_8ME_TOP
`define RBVE32_BASE_ADDR_H              7'h30               //CLASS_8ME_TOP

`define ACTION3_BASE_ADDR               7'h31               //CLASS_8ME_TOP
`define BV4_BASE_ADDR                   7'h32               //CLASS_8ME_TOP
`define ACTION4_BASE_ADDR               7'h34               //CLASS_8ME_TOP
`define BV5_BASE_ADDR                   7'h35               //CLASS_8ME_TOP
`define ACTION5_BASE_ADDR               7'h37               //CLASS_8ME_TOP
`define BV6_BASE_ADDR                   7'h38               //CLASS_8ME_TOP
`define ACTION6_BASE_ADDR               7'h3A               //CLASS_8ME_TOP
`define ME7_BASE_ADDR                   7'h3B               //CLASS_8ME_TOP
`define ME8_BASE_ADDR                   7'h3E               //CLASS_8ME_TOP
`define TX_FRM_CNT_BASE_ADDR            14'h2080            //schedule_cpu_interface
`define RX_FRM_CNT_BASE_ADDR            14'h2081            //schedule_cpu_interface
`define NODE_PRI_MAX_THR_BASE_ADDR      11'h411             //schedule_cpu_interface
`define NODE_PRI_MAX_MIN_THR_BASE_ADDR  11'h412             //schedule_cpu_interface
`define XLPCS_BASE_ADDR                 7'h42               //PHY_MAC_interface

//2022.6.9
`define XLPCS_BASE_ADDR_H               7'h44               //PHY_MAC_interface
`define XPCS_BASE_ADDR                  7'h59               //PHY_MAC_interface
// `define XPCS_BASE_ADDR                  7'h49               //PHY_MAC_interface

//2022.7.1 wzk
`define PHY_HEAD_BASE_ADDR              7'h44               //PHY_HEAD
`define PHY_ROM_BASE_ADDR               7'h54               //PHY_ROM
`define PHY_TAIL_BASE_ADDR              7'h58               //PHY_TAIL

`define MAC_BASE_ADDR                   7'h5A               //PHY_MAC_interface
`define TOKEN_RATE_BASE_ADDR            7'h5B               //CLASS_8ME_TOP
`define FRAME_LEN_CNT_BASE_ADDR         7'h5F               //CLASS_8ME_TOP
`define FIELD_SEL_BASE_ADDR             7'h63               //CLASS_8ME_TOP
`define INSERT_BASE_ADDR                7'h64               //insert_capture_top
`define CAPTURE_BASE_ADDR               7'h68               //insert_capture_top
`define SRAM_BASE_ADDR                  7'h6C               //insert_capture_top


// register address                                num     hex   R/W/O  Width     location
`define ADDR_RESET                                  0   // 000 // RW // 26bit    //PHY_MAC_interface_busn
`define ADDR_CAP_INS                                1   // 004 // RW // 2bit     //insert_cpature_top
`define ADDR_CAP_STAT                               2   // 008 // RO // 32bit    //insert_cpature_top
`define ADDR_DPRAM_STAT                             3   // 00c // RO // 32bit    //insert_cpature_top
`define ADDR_INSERT_INS                             4   // 010 // RW // 1bit     //insert_cpature_top
`define ADDR_INSERT_FRM_LEN                         5   // 014 // RW // 11bit    //insert_cpature_top
`define ADDR_INSERT_FRM_INFO                        6   // 018 // RW // 11bit    //insert_cpature_top
`define ADDR_INSERT_DIR                             7   // 01c // RW             //----not exist
`define ADDR_OPA_INS                                8   // 020 // RW             //----not exist
`define ADDR_DEST_MAC_ADDR                          9   // 024 // WO // 32bit    //CLASS_8ME_TOP
`define ADDR_MULTI_CAST                             10  // 028 // RW // 32bit    //CLASS_8ME_TOP
`define ADDR_CAM_LIVE_TIME_STATE                    11  // 02c // RW // 32bit    //CLASS_8ME_TOP
`define ADDR_COLLISION_SOUR_PORT_1                  12  // 030 // RO // 4bit     //CLASS_8ME_TOP
`define ADDR_COLLISION_SOUR_PORT_2                  13  // 034 // RO // 4bit     //CLASS_8ME_TOP
`define ADDR_COLLISION_MAC_ADDR_1_STATE             14  // 038 // RO // 32bit    //CLASS_8ME_TOP
`define ADDR_COLLISION_MAC_ADDR_2_STATE             15  // 03c // RO // 32bit    //CLASS_8ME_TOP
`define ADDR_WRR                                    16  // 040 // RW             //----not exist
`define ADDR_CNT_IN_REGISTER                        17  // 044 // RO             //----not exist
`define ADDR_CNT_OUT                                18  // 048 // RO             //----not exist
`define ADDR_FP_RX_CNT                              19  // 04c // RO             //----not exist
`define ADDR_MAC_IN_CNT                             20  // 050 // RO             //----not exist
`define ADDR_FREEBLOCKNUMBER_REGISTER               21  // 054 // RO // 32bit    //schedule_cpu_interface
`define ADDR_MAC_ENQUEUE_CNT                        22  // 058 // RO // 32bit    //schedule_cpu_interface
`define ADDR_MAC_ENQUEUE_FAIL_CNT                   23  // 05c // RO // 32bit    //schedule_cpu_interface
`define ADDR_ENQUEUE_NUM                            24  // 060 // RO // 32bit    //schedule_cpu_interface
`define ADDR_DEQUEUE_NUM                            25  // 064 // RO // 32bit    //schedule_cpu_interface
`define ADDR_ETH_TYPE                               26  // 068 // RW             //----not exist
`define ADDR_MAX_SOURCE_ADDR_NUM_VALUE              27  // 06c // RW             //----not exist
`define ADDR_INNER_PHY_INFOR_REGISTER               28  // 070 // RW             //----not exist
`define ADDR_BROADCAST_PKT_REJECTION_STATE          29  // 074 // RW             //----not exist
`define ADDR_UNKNOW_PKT_REJECTION_STATE             30  // 078 // RW             //----not exist
`define ADDR_MAX_RX_LENGTH                          31  // 07c // RO // 32bit    //schedule_cpu_interface
`define ADDR_MAX_TX_LENGTH                          32  // 080 // RO // 32bit    //schedule_cpu_interface
`define ADDR_CPU_BD_PUBLIC_LENGTH                   33  // 084 // RW // 32bit    //schedule_cpu_interface
`define ADDR_CPU_WRRD_ADDRESS_MDIO                  34  // 088 // RO             //----not exist
`define ADDR_CPU_WRITE_DATA_MDIO                    35  // 08c // RW             //----not exist
`define ADDR_CPU_READ_DATA_MDIO                     36  // 090 // RO             //----not exist
`define ADDR_MAC_IP_CONFIG                          37  // 094 // RW             //----not exist
`define ADDR_RDY_FLAG_REG                           38  // 098 // RO             //----not exist
`define ADDR_WRR_WEIGHT                             39  // 09c // RO             //----not exist
`define ADDR_DWRR_EN                                40  // 0a0 // RW // 1bit     //schedule_cpu_interface
`define ADDR_DWRR_WEIGHT0                           41  // 0a4 // RW // 16bit    //schedule_cpu_interface
`define ADDR_DWRR_WEIGHT1                           42  // 0a8 // RW // 16bit    //schedule_cpu_interface
`define ADDR_DWRR_WEIGHT2                           43  // 0ac // RW // 16bit    //schedule_cpu_interface
`define ADDR_DWRR_WEIGHT3                           44  // 0b0 // RW // 16bit    //schedule_cpu_interface
`define ADDR_DWRR_WEIGHT4                           45  // 0b4 // RW // 16bit    //schedule_cpu_interface
`define ADDR_DWRR_WEIGHT5                           46  // 0b8 // RW // 16bit    //schedule_cpu_interface
`define ADDR_DWRR_WEIGHT6                           47  // 0bc // RW // 16bit    //schedule_cpu_interface
`define ADDR_DWRR_WEIGHT7                           48  // 0c0 // RW // 16bit    //schedule_cpu_interface
`define ADDR_PHY_CTRL_REGISTER                      49  // 0c4 // RW // 17bit    //PHY_MAC_interface_busn
`define ADDR_REQ_LB_REGISTER                        50  // 0c8 // RW // 9bit     //PHY_MAC_interface_busn
`define ADDR_ACK_REGISTER                           51  // 0cc // RO // 9bit     //PHY_MAC_interface_busn
`define ADDR_MAC_PCS_STATUS_REGISTER0               52  // 0d0 // RO // 28bit    //PHY_MAC_interface_busn
`define ADDR_MAC_PCS_STATUS_REGISTER1               53  // 0d4 // RW // 12bit    //PHY_MAC_interface_busn
`define ADDR_MAC_PCS_STATUS_REGISTER2               54  // 0d8 // RO // 17bit    //PHY_MAC_interface_busn
`define ADDR_MAC_PCS_STATUS_REGISTER3               55  // 0dc // RW // 32bit    //PHY_MAC_interface_busn
`define ADDR_MAC_PCS_STATUS_REGISTER4               56  // 0e0 // RW // 32bit    //PHY_MAC_interface_busn
`define ADDR_MAC_PCS_STATUS_REGISTER5               57  // 0e4 // RW // 32bit    //PHY_MAC_interface_busn
`define ADDR_MAC_PCS_STATUS_REGISTER6               58  // 0e8 // RW // 32bit    //PHY_MAC_interface_busn
`define ADDR_MAC_PCS_STATUS_REGISTER7               59  // 0ec // RO // 32bit    //PHY_MAC_interface_busn
`define ADDR_MAC_PCS_STATUS_REGISTER8               60  // 0f0 // RO // 32bit    //PHY_MAC_interface_busn
`define ADDR_COLLISION_DETECT_ON_OFF                61  // 0f4 // RW // 1bit     //CLASS_8ME_TOP
`define ADDR_LIVE_TIME_VAL                          62  // 0f8 // RW // 1bit     //CLASS_8ME_TOP
`define ADDR_COLLISION_WREN                         63  // 0fc // RO // 1bit     //CLASS_8ME_TOP
`define ADDR_LOOPBACK_ON_OFF                        64  // 100 // RW // 1bit     //CLASS_8ME_TOP
`define ADDR_MULTI_MODIFY                           65  // 104 // RW // 32bit    //CLASS_8ME_TOP
`define ADDR_BROADCAST_PKT_PASS                     66  // 108 // RW // 1bit     //CLASS_8ME_TOP
`define ADDR_BROADCAST_PKT_ACK                      67  // 10c // RO // 1bit     //CLASS_8ME_TOP
`define ADDR_UNKNOW_PKT_PASS                        68  // 110 // RW // 1bit     //CLASS_8ME_TOP
`define ADDR_UNKNOW_PKT_ACK                         69  // 114 // RO // 1bit     //CLASS_8ME_TOP
`define ADDR_CONFIG_DONE                            70  // 118 // RO // 4bit     //np_misc
`define ADDR_HASH_ERROR                             71  // 11c // RO // 5bit     //CLASS_8ME_TOP // ME2  
`define ADDR_CPU_RSTN_REGISTERS                     72  // 120 // RW // 32bit    //----if define CPU
`define ADDR_CPU_RXD_REGISTERS                      73  // 124 // RW // 6bit     //----if define CPU
`define ADDR_CPU_GPI_REGISTERS                      74  // 128 // RW // 2bit     //----if define CPU
`define ADDR_CPU_SPI_REGISTERS                      75  // 12c // RW // 14bit    //----if define CPU
`define ADDR_CPU_FUSE_REGISTERS                     76  // 130 // RW // 11bit    //----if define CPU
`define ADDR_CPU_IF_DATA_ADC_D_I_REGISTER0          77  // 134 // RW // 32bit    //----if define CPU
`define ADDR_CPU_IF_DATA_ADC_D_I_REGISTER1          78  // 138 // RW // 32bit    //----if define CPU
`define ADDR_CPU_IF_DATA_ADC_D_I_REGISTER2          79  // 13c // RW // 32bit    //----if define CPU
`define ADDR_IO_PULLUP_CFG_REGISTER                 80  // 140 // RW             //----not used IO_CFG any more
`define ADDR_IO_PULLDOWN_CFG_REGISTER               81  // 144 // RW             //----not used IO_CFG any more
`define ADDR_RAM_2P_CFG_REGISTER                    82  // 148 // RW // 10bit    //np_misc MEM_CFG
`define ADDR_RAM_DP_CFG_REGISTER                    83  // 14c // RW // 12bit    //np_misc MEM_CFG
`define ADDR_RF_2P_CFG_REGISTER                     84  // 150 // RW // 7bit     //np_misc MEM_CFG
`define ADDR_PHY_ACCESS_CFG                         89  // 164 // RW // 2bit     //single busn PHY
`define ADDR_IDCODE_ME0                             90         // RO // 32bit    //scan_ME
`define ADDR_IDCODE_ME1                             91         // RO // 32bit    //scan_ME
`define ADDR_IDCODE_ME2                             92         // RO // 32bit    //scan_ME
`define ADDR_IDCODE_ME3                             93         // RO // 32bit    //scan_ME
`define ADDR_IDCODE_ME4                             94         // RO // 32bit    //scan_ME
`define ADDR_IDCODE_ME5                             95         // RO // 32bit    //scan_ME
`define ADDR_IDCODE_ME6                             96         // RO // 32bit    //scan_ME
`define ADDR_IDCODE_ME7                             97         // RO // 32bit    //scan_ME
`define ADDR_DMA_CHANNEL_SEL                        98         // RW // 4bit     //np_misc
`define ADDR_ALY_MODE_SEL                           99         // RW // 2bit     //CLASS_8ME_TOP
`define ADDR_JTAG_OCCUPY                            100        // RO // 1bit     //np_misc
